package easy;

import java.util.HashMap;

/**
 * @author admin
 * 205. 同构字符串
 * 解题思路：维护两张哈希表，第一张哈希表map1以s中字符为键，映射至t的字符为值，第二张哈希表map2
 * 以t中字符为键，映射至s的字符为值。从左至右遍历两个字符串的字符，不断更新两张哈希表，如果出现
 * 冲突（即当前下标index对应的字符s[index]已经存在映射且不为t[index]或当前下标index对应的字
 * 符t[index]已经存在映射且不为s[index]）时说明两个字符串无法构成同构，返回false。如果遍历结
 * 束没有出现冲突，则表明两个字符串是同构的，返回true 即可。
 */
public class LeeCode206 {

    public boolean isIsomorphic(String s, String t) {

        HashMap<Character, Character> map1 = new HashMap<>();
        HashMap<Character, Character> map2 = new HashMap<>();
        int length = s.length();
        for (int i = 0; i < length; i++) {
            char c1 = s.charAt(i);
            char c2 = t.charAt(i);
            if ((map1.containsKey(c1) && map1.get(c1) != c2) || (map2.containsKey(c2) && map2.get(c2) != c1)) {
                return false;
            }else {
                map1.put(c1, c2);
                map2.put(c2, c1);
            }

        }
        return true;
    }
    /*
    map1   (f,e)(o,g)
    map2   (e,f)(g,o)
     */

    public static void main(String[] args) {
        System.out.println(new LeeCode206().isIsomorphic("foo", "ego"));
    }
}
